const fs = require('fs');
const path = require("path");
const BUILD_OUTPUT_DIRS = [
  "dist", // Vite/Vue/React 默认
  "build", // Create-React-App 默认
  "out", // Next.js 默认
  "public", // 某些静态站点
  "output", // 其他框架
  "release", // 自定义配置
];
// 使用示例
// const builder = require('./utils/index');
const builder = require('./build'); // --项目临时构建目录

async function deploy() {
  try {
    const projectRoot = __dirname;
    const config = {
      repoUrl: 'https://gitee.com/reinsdo/vite-template-ts.git',// --git地址
      buildDir: path.join(projectRoot, 'build'), // --构建临时目录，使用绝对路径
      // targetDir: path.join(projectRoot, 'dist')  // --构建后的输出目录，网站的实际目录
      // backupRootDir: path.join(projectRoot, 'backups'),
       backupRootDir: 'D:/nginx-1.27.4/html/www/test/backups',
      targetDir: 'D:/nginx-1.27.4/html/www/test/dist' // --构建后的输出目录，网站的实际目录
    };

    console.log('=== 部署配置 ===');
    console.log('项目根目录:', projectRoot);
    console.log('构建目录:', config.buildDir);
    console.log('输出目录:', config.targetDir);

    // 1. 克隆仓库（添加目录验证）
    console.log('\n=== 1. 克隆仓库 ===');
    await builder.cloneRepo(config.repoUrl, config.buildDir);
    if (!fs.existsSync(config.buildDir)) {
      throw new Error('克隆后构建目录未创建');
    }

    // 2. 构建项目（添加构建验证）
    console.log('\n=== 2. 构建项目 ===');
    await builder.installAndBuild(config.buildDir);
    const hasBuildOutput = BUILD_OUTPUT_DIRS.some(dir => 
      fs.existsSync(path.join(config.buildDir, dir))
    );
    if (!hasBuildOutput) {
      throw new Error('构建未生成输出文件');
    }

    // 3. 部署结果
    console.log('\n=== 3. 部署结果 ===');
    await builder.copyBuildResult(config.buildDir, config.targetDir,config.backupRootDir);

    // 4. 清理（可选）
    console.log('\n=== 4. 清理 ===');
    await builder.cleanup(config.buildDir);

    console.log('\n=== 部署成功 ===');
  } catch (error) {
    console.error('\n!!! 部署失败:', error.message);
    console.error('\n=== 调试信息 ===');
    console.error('当前工作目录:', process.cwd());
    console.error('目录是否存在:',
      fs.existsSync('./build') ? '存在' : '不存在'
    );
    process.exit(1);
  }
}

deploy();